#ifndef LINKEDLIST_H
#define LINKEDLIST_H

typedef struct Node
{
  void* element;
  struct Node* next;
};

typedef struct LinkedList
{
  struct Node* head;
};

int IsEmpty(const struct LinkedList* const list);
void Add(struct LinkedList* list,void* elem);
void PrintList(const struct LinkedList* const list, void (*PrintFunc)(void* elem));
int Length(const struct LinkedList* const list);
void Append(struct LinkedList* l1, struct LinkedList* l2);
void AddAt(struct LinkedList* list, void* element, const int position);
void AddToTail(struct LinkedList* list, void* element);
void Clear(struct LinkedList* list);
struct LinkedList* Copy(const struct LinkedList* const list);

#endif

